/**
 * 
 */
package es.uab.es2.TimeTracker.nucli;


import java.util.ArrayList;
import java.util.Iterator;
import java.util.Observable;
import java.util.Observer;

import org.apache.log4j.Logger;

/** 
 * CLasse encarregada de mostrar els diferents {@link Projecte} i 
 * {@link Tasca} amb la seva durada, 
 * data inicial, data final de forma ordenada
 * i comprensible.
 * Implemeta el patr� de disseny Observer.
 * Cada 2 segons {@link Rellotge} notifica 
 * a la Taula,aquesta imprimeix l'arbre de Projectes en el seu 
 * ordre corresponent segons com estigui creat.
 * 
 * 
 * @author Jes�s Berm�dez, Ricard Figueras i Abel Rodr�guez.
 */
public class Taula implements Observer {
    
    
    private static final long MIL = 1000;
    /**
     * Instanciaci� de un Logger (Loj4j) per a la definici� de nivells 
     * en la depuraci� del aplicatiu.
     * @uml.property  name="logger"
     */
    private static Logger logger = Logger.getLogger(Taula.class);

    @Override
    /**
     * Heredat de la classe {@link Observer}.
     * Es realitza la impressi� de taula cada vegada que 
     * el {@link Rellotge} notifica als Observadors cada 2 segons.
     * Es recorrer tot el arbre desde la fulla fins que arriba a l'arrel
     * imprimint branca per branca.
     * 
     */
    public final void update(Observable observable, Object data) {
        
        // TODO Auto-generated method stub
       
           
     logger.debug("\n");
     logger.debug("id\t" + "nom\t" + "\tdata inici\t" + "\t" 
     + "\tdata final\t" + "\tdurada\t");
     logger.debug("-----------------------------" 
     + "-------------------------------------- ");
     imprimirTaula(Client.arrel);
   
    }	
			/**
			 * En aquest metode es realitza la impresi� en 
			 * arbre de tots els projectes i tasques creats en la clase client.
			 */
			public final void imprimirTaula(Projecte arrel) {
			    ArrayList<Activitat> hoja = arrel.getActivitats();
                Iterator<Activitat> iter = hoja.iterator(); 
                
                while (iter.hasNext()) {
                 
                  Activitat actTemporal = iter.next();
                  logger.debug(actTemporal.getId() + "\t" 
                  + 
                  actTemporal.getNom() 
                          + "\t" + actTemporal.getDataInicial() + "\t"
                  +
                  actTemporal.getDataFinal() + "\t" + "00:00:" 
                  + 
                          actTemporal.getDurada() / MIL);
                  if (actTemporal.getClass() == Projecte.class) {
                       imprimirTaula((Projecte) actTemporal);
                    }
                }
			}
				
				/**
				 * constructor per defecte creat per a la elaboraci� de proves en JUnit.
				 */
				public Taula() {
				}
}
